home *** CD-ROM | disk | FTP | other *** search
/ A.C.E. 2 / ACE CD 2.iso / FILES / DOCS / AMOSDOC.LHA / AmosV1.3Update.doc < prev    next >
Text File  |  1994-11-27  |  31KB  |  788 lines

  1.                       _____   _________________________
  2.                      /    /  /                         \
  3.                     /    /  /   ____________     ___    \
  4.                    /    /  /   /           /    /   \    \
  5.                   /    /  /   /_____      /    /     \    \
  6.                  /    /  /          \    /    /       \    \
  7.                 /    /   \_____     /   /    /         \    \
  8.                /    /         /    /   /    /           \    \
  9.               /    /_________/    /   /    /_____________|    |
  10.              |                   /   |                        |
  11.              |__________________/    |________________________|
  12.  
  13.  
  14.  
  15.                         AMOS VERSION 1.3 UPDATE
  16.  
  17.                                WHAT'S NEW!
  18.  
  19.  
  20. Typed by SIDEWINDER of LSD.
  21. Manual supplied by SCOOTER.
  22.  
  23.  
  24. INTRODUCTION
  25. AMOS Basic has gone through a number of changes during the course of its
  26. existence.  Rather than rest on our laurels, we've steadily updated the
  27. system to include many new features suggested by AMOS users.  Incredibly
  28. enough, we've placed these improvements on the public domain.  Special
  29. updater disks are available from the AMOS user group or your local PD
  30. library.  So whatever your version of AMOS Basic, you can upgrade to the
  31. latest system for the price of a disk.
  32.  
  33. Here's a list of the versions of AMOS Basic to date:
  34.  
  35. AMOS 1.1
  36.  
  37. The original!
  38.  
  39. AMOS 1.2
  40.  
  41. This includes several new commands such as BANK SWAP.  There was also a
  42. whole new set of SPRITE flipping routines introduced which allowed you to
  43. display a single image in several orientations.
  44.         The file-selector was completely reworked, and allowed you to change
  45. the current disk by pressing the RIGHT mouse button and simply clicking
  46. on the new device name with the mouse.  The UP/DOWN arrows were
  47. repositioned at the top of the scroll bar for maximum speed, and the
  48. PARENT button was repositioned to the far left corner and reduced in
  49. size.
  50.  
  51. AMOS 1.23
  52.  
  53. Added the SERIAL extension, SPRITE compactor and procedure locking
  54. utility.
  55.  
  56. AMOS 1.3
  57.  
  58. The latest version of AMOS Basic is version 1.3.  This comes with the
  59. compiler and includes a range of turbo-charged Bob and screen copy
  60. routines from the mind of Gary Symons.  These optimise the performance of
  61. commands such as SCREEN COPY and PASTE BOB/ICON, leading to dramatic
  62. speed improvements in many games.
  63.         All the above features from V1.1 onwards, exist in V1.3.  This
  64. supplement manual will provide you with the information to access all
  65. these new additions to AMOS.
  66.  
  67.  
  68. BOB FLIPPING COMMANDS
  69. In a great number of games, the main character needs to animate left to
  70. right, and up and down.  Up to now, you were obliged to keep in the
  71. sprite bank reversed copies of small animation sequences for the main
  72. character.  As the main character usually has the best animation, you
  73. lose an enormous amount of space!
  74.         For the game RanXerox, for which AMOS author Francois Lionet wrote
  75. the sprite routines, a flipping routine was developed which allowed just
  76. one copy of the main character to be kept in the bank.  This routine has
  77. been enhanced and placed into AMOS.
  78.         How does it work?  Imagine your character is walking to the left and
  79. then back to the right.  You would only have in your bank the image of
  80. him walking to the right.  To display this right image, you simply refer
  81. to the image number in the bank as usual.
  82.         To display the image reversed in the X axis (left walking image),
  83. you set bit number 15 of the image number to 1.  Don't panic, you can
  84. simply do it with:
  85.  
  86.         $8000+Image number
  87.  
  88. So:
  89.  
  90.         Bob 1,160,100,1
  91.  
  92. will display your character walking right, and:
  93.  
  94.         Bob 1,160,100,$8000+1
  95.  
  96. will display it walking left.  The same principle is used for vertical
  97. reversing.  For this, bit number 14 is used - add $4000 to the image
  98. number.  To have vertical and horizontal reversing, use $C000.
  99.         The symmetry is a full symmetry:  The hot spot of the bob is also
  100. reversed.  For example, if we put the hot spot in X under the feet of our
  101. character, the reversed version would also have it under his feet.  So be
  102. careful if you set the hot spot on the top left corner on a bob, the
  103. reversed image will be displaced at the top left!
  104.         You might say that $8000 and $C000 are a bit weird to use.  We have
  105. provided special functions to give a better AMOS interface:
  106.  
  107.         =HREV(image)            adds $8000 to the image
  108.         =VREV(image)            adds $4000
  109.         =REV(image)             adds $C000
  110.  
  111. Use them in place of the hex values:
  112.  
  113.         Bob 1,160,100,10
  114.         Bob 1,160,100,HREV(10)
  115.         Bob 1,160,100,VREV(10)
  116.         Bob 1,160,100,REV(10)
  117.  
  118. To allow easy use of the bob flipper in AMAL, we have implemented
  119. HEXADECIMAL evaluation.  So you can use hex notation to refer easily to
  120. reversed bobs.  If hex frightens you, just add $8000, $4000 or $C000
  121. before all references in your AMAL strings.
  122.  
  123. Example:
  124.  
  125. Old AMAL string:
  126.  
  127.         "Anim 0,(1,2)(2,2)(3,2)(4,2)"
  128.  
  129. New reversed string:
  130.  
  131.         "Anim 0,($8000+1,2)($8000+2)($8000+3)($8000+4)"
  132.  
  133. or
  134.  
  135.         "Anim 0,($8001,2)($8002,2)($8003,2)($8004,2)"
  136.  
  137. If you use a register to calculate the image number, do not try to modify
  138. the calculation itself, but only when you assign the register to the
  139. image.
  140.  
  141. Old AMAL string:
  142.  
  143.         For R0=1 To 10; Let A=R0; Next R0
  144.  
  145. New one:
  146.  
  147.         For R0=1 To 10; Let A=$C000+R0; Next R0
  148.  
  149.  
  150. HOW DOES THE FLIP ROUTINES WORK?
  151. It is really important for you to understand how it works internally, so
  152. that you do not ask this system to do things it is not designed to do.
  153.         The reversing system is designed to free memory before trying to be
  154. fast (although we would not mind if it was actually fast, would we?).
  155. Concessions had to be made to have it fast, and at the same time easy and
  156. powerful.
  157.         The routine actually works right in the middle of the bank, and does
  158. not use any extra memory.  The bobs are flipped during the UPDATE
  159. process, just before a bob is redrawn on the screen.  AMOS looks to see
  160. if the image needs to be flipped in the bank.  If it does, it is flipped
  161. and a flag is set within the bank.  On the next UPDATE, if the bob image
  162. has not changed, it will be flipped, thus saving a lot of time.
  163.  
  164. If you understand the above, you will realize one BIG limitation.  It is
  165. not wise to use more than one flipped bob pointing to the same image.
  166. Let's see the next example:
  167.  
  168.         Bob 1,160,100,1
  169.         Bob 2,160,150,$8001
  170.         Bob 3,20,20,$4001
  171.         Bob 4,20,100,$C001
  172.         Update
  173.  
  174. During the UPDATE process, AMOS will first draw bob number 1.  No
  175. problem, it is in the right position.  Then bob number 2 - AMOS needs to
  176. reverse it in X.  Bob number 3 needs a Y and an X reversing (to put the
  177. bobs back to normal in X!).  Then bob number 4 needs an X flipping.
  178.         On the next update, providing the bob's image has not changed, to
  179. display bob 1, AMOS will have to flip it in X and Y, then bob 2...
  180.         As you can see, for each UPDATE, that is, every 50th of second, if
  181. the bobs move they need to be reversed!  This will work, but will take a
  182. lot of processor time, and the animation will be disastrous.
  183.         So the golden rule is, use the reversed bobs for object alone on a
  184. screen (or be sure that normal and reversed images are not displayed at
  185. the same time on the screen).  If you want, you can have two bobs like
  186. this - experiment!
  187.         We told you before that this system was for use with bobs.  Yes, it
  188. is totally automatic with bobs.  But as it directly affects the sprite
  189. bank, you can also use it with sprites.
  190.         When a hardware computed sprite is calculated, AMOS looks into the
  191. sprite bank and gets the image from it.  If the image is reversed at that
  192. moment, the hardware sprite will display a reversed image.  You can
  193. therefore have reversed hardware sprites using this method.  But you
  194. cannot do this for example:
  195.  
  196.         Sprite 1,200,200,$8001
  197.  
  198. PASTING FLIPPED BOBS
  199. PASTE BOB also accepts reversed images.  A simple trick to reverse an
  200. image in the bank without having to display a bob, is to PASTE the
  201. reversed image outside of the screen.  Example:
  202.  
  203.         Paste Bob 500,500,$C000
  204.  
  205. This will reverse image 4 in the bank, without any output (and quite
  206. fast).
  207.  
  208. COLLISION DETECTION
  209. This is an important point, and you have to be very careful when you
  210. detect collisions with reversed bobs!
  211.         The collision detection uses the shapes in the bank at the very
  212. moment it is called.  Let's see an example that will never work:
  213.  
  214.         Bob 1,160,100,1
  215.  
  216.         Do
  217.           Bob 2,XScreen(XMouse),YScreen(YMouse),$8001
  218.           Wait Vbl
  219.           Exit if Bob Col(1)
  220.         Loop
  221.  
  222. Why doesn't it work?  We have two reversed images of the same definition
  223. in the bank.  After the updating process, the image in the bank is left
  224. reversed.  So the Bob Col instruction will take bob shape 1, the reversed
  225. image, and this will not work!
  226.         So remember: THOU SHALT NEVER USE COLLISION DETECTION WITH MORE THAN
  227. ONE REVERSED IMAGE ON THE SCREEN!
  228.  
  229. HOW IS IT CODED INTO THE SPRITE BANK?
  230. Two bits of each images X Hot Spot are used to flag the flipping (at
  231. SPRITE BASE+6).
  232.  
  233. Bit number 15 for X             0 if normal, 1 if reversed
  234. Bit number 14 for Y             0 if normal, 1 if reversed
  235.  
  236. Before RUN and SAVE, the bank is restored to its normal state, so that it
  237. is still compatible with version 1.1.
  238.  
  239. BLOCK FLIPPING
  240. The flip routine can be used for blocks.
  241.  
  242. HREV BLOCK (Flip a block horizontally)
  243.  
  244. HREV BLOCK image
  245.  
  246. Flips block number IMAGE horizontally.
  247.  
  248. VREV BLOCK (Flip a block vertically)
  249.  
  250. VREV BLOCK image
  251.  
  252. Flips block number IMAGE vertically.
  253.  
  254. SQUASH A BOB ROUTINE
  255. This routine was originally written for a Fun School 3 program called
  256. Letters.  Each letter in the alphabet is displayed as a single large
  257. sprite.  This requires a total of 52 separate images, taking up a massive
  258. 110k of memory.  Since only a couple of images are displayed at a time,
  259. most of this space is actually wasted.  So a small routine was written to
  260. pack the unused sprites into a spare memory bank.  This allowed us to
  261. compress the entire sprite bank into just 26k!
  262.         AMOS Squash is now available on the public domain.  Feel free to use
  263. it in any of your own programs.  It's especially useful for the massive
  264. Level Guardians in an arcade game.  These can be compressed into a
  265. fraction of their normal size, and can be instantly retrieved at the
  266. appropriate point in your program.
  267.  
  268. USING AMOS SQUASH
  269. The packer program comes in two separate parts.  The first program loads
  270. a sprite bank into memory and compacts your images.  It can be found in
  271. the file 'Squash_a_bob.AMOS'
  272.         In order to use this routine, you need to perform the following
  273. simple procedure:
  274.  
  275.   *     Load a sprite bank from the disk using the file-selector.
  276.   *     Enter the number of the FIRST sprite you wish to pack.
  277.   *     Enter the number of the FINAL sprite in your list.
  278.   *     Input the number of colours used by your sprite images.
  279.   *     Choose a new memory bank to hold your squashed images.
  280.  
  281. The squasher routine will now be executed and your selected images will
  282. be quickly compressed.  After it has concluded, you will be given an
  283. option to save your compacted images onto the disk.
  284.         Note that NO colour information is saved with these images.  So you
  285. may need to make a note of the current colour settings before proceeding
  286. any further.
  287.         Once you've squashed your images, you can load them into your AMOS
  288. Basic programs with the help of three small procedures.  These can be
  289. found in the file 'Squash_procs.AMOS' and can be incorporated using the
  290. MERGE command from the AMOS Editor menu.
  291.         The squash routines are remarkably easy to use.  The first stage is
  292. to load your original sprite bank from Direct mode and delete the images
  293. you have just compressed.  Use a line like:
  294.  
  295.         Del Sprite start To finish
  296.  
  297. This erases your old images from memory, saving you considerable amount
  298. of storage space.  You can now enter your packed images from the disk
  299. with the LOAD command:
  300.  
  301.         Load "images.abk"
  302.  
  303. At the start of your program, you should initialise the compaction system
  304. with a call to the PBOB_INIT procedure:
  305.  
  306.         PBOB_INIT[bank,cols,max_x,max_y]
  307.  
  308. Where:
  309.  
  310.         bank            is the bank number containing your compressed images
  311.         cols            holds the number of colours
  312.         max_x   stores the maximum width of your images
  313.         max_y   holds the maximum height of your images
  314.  
  315. The action of this procedure is to prepare a temporary screen for the
  316. squasher utility.  Your images can now be unpacked as and when they are
  317. required, using a simple call to the PBOB routine.
  318.  
  319.         PBOB[source,dest]
  320.  
  321. 'source' is the number of the image to be unpacked.  This is the original
  322. image number from the sprite bank.
  323. 'dest' is the number of the new image you wish to install in the sprite
  324. bank.  Choose the number of the last sprite in the bank plus one.
  325.         Once you've installed your image into memory, you can animate it
  326. directly with the various SPRITE or BOB commands.  PBOB can be called as
  327. many times as you wish.  So the same image number can be re-used again
  328. and again.
  329.         Finally, add a call to the PBOB_END procedure towards the end of
  330. your program.  This will erase the hidden screen created by PBOB_INIT.
  331.  
  332.  
  333. SERIAL PORT COMMANDS EXTENSION
  334. Welcome to the intriguing world of AMOS communications.  The serial
  335. extension is intended for those of you who wish to transfer information
  336. between several different computers using the Amiga's serial port.
  337.         The extension provides you with a total of 15 new commands.  You can
  338. use these commands to create amazing multi-user games.  It's also
  339. possible to access a Midi interface which has been plugged into the
  340. Amiga's serial port.  So musicians will be able to control their
  341. instruments directly from AMOS Basic.  Wow!  As you would expect, full
  342. multitasking is supported.
  343.  
  344.  
  345. OPENING THE SERIAL PORT
  346.  
  347. SERIAL OPEN (Opens a channel for Serial I/O)
  348. SERIAL OPEN Channel, Port_no [,Shared, Xdisabled, 7wires]
  349. Opens a communication channel to a serial device.
  350.  
  351. 'Channel' This is an identification number which will be used for all
  352. subsequent communication commands.  Allowable values range from 0 to 3.
  353.  
  354. 'Port_no' Specifies the logical device number of the serial port.
  355. Normally, this value should be set to zero.  However, if you've plugged a
  356. MULTI SERIAL card into your Amiga, you can access your additional ports
  357. using the numbers from one onwards.
  358.  
  359. 'Shared' (optional)  This is a flag which informs AMOS that the device
  360. can be shared with other tasks which are currently running on your Amiga.
  361. It's used in multitasking.  A value of FALSE (zero) will grab the channel
  362. for AMOS Basic, and will deny access to any other programs.  If it's set
  363. to TRUE (-1), the serial port can be shared between several programs in
  364. memory.  Beware: This system must be used with extreme care or the Amiga
  365. could easily crash!
  366.  
  367. 'Xdisabled' (optional) Toggles XON/XOFF checking during transmission of
  368. your data over the serial line.  It's essential to set this flag when you
  369. are first opening the device, even if it will only be required later.
  370. The default value is FALSE (0) and disables the system.  If you want to
  371. enable the checking, use the value of TRUE (-1).  After the port has been
  372. opened, you'll then need to set the XON and XOFF characters using a
  373. seperate call to the SERIAL X command.
  374.  
  375. '7wires' (optional) A value of TRUE (-1) tells the device to use the 7
  376. wires system as explained in the official Commodore documentation.  The
  377. default is FALSE (0).
  378.  
  379. When you call the Serial Open command for the first time, it will
  380. automatically load the SERIAL.DEVICE library from your system disk.  So
  381. make sure it's available from the current drive.
  382. Incidently, the default serial settings use the French Minitel protocol:
  383. 1200 Baud, 7 bits, 1 stop bit, Even parity.  This can easily be changed
  384. using the SERIAL SPEED, SERIAL BIT or SERIAL PARITY instructions if
  385. required.
  386.  
  387.  
  388. CLOSING THE SERIAL PORT
  389. SERIAL CLOSE (Closes one or more serial channels)
  390. SERIAL CLOSE[Channel]
  391. If you don't include the channel number, SERIAL CLOSE will close all
  392. currently opened serial channels with absolutely no error checking.  The
  393. optional channel number allows you to close a single channel and use all
  394. the normal error checks.
  395.  
  396. NOTE: Whenever a program is RUN from AMOS Basic, any opened channels will
  397. be automatically closed for you.
  398.  
  399.  
  400. SENDING INFORMATION THROUGH THE SERIAL PORT
  401.  
  402. SERIAL SEND (Output a string via a serial channel)
  403. SERIAL SEND Channel, t$
  404. Sends the string t$ straight to the specified serial channel.  It does
  405. not wait for the data to be transmitted through the actual port.  You'll
  406. therefore need to use the =SERIAL CHECK(Channel) function to detect when
  407. the transmission has been completed.
  408.  
  409. SERIAL OUT (Outputs a memory block via a serial channel)
  410. SERIAL OUT Channel, Address, Length
  411. This is identical to Serial Send except that it works with RAW data.
  412.  
  413. 'Address' is the address of your data in memory.
  414. 'Length' is the number of bytes to be sent.
  415.  
  416.  
  417. READING INFORMATION FROM THE SERIAL PORT
  418.  
  419. SERIAL GET (Gets a byte from a serial device)
  420. =SERIAL GET(Channel)
  421. Reads a single byte from the serial device.  If nothing is available a
  422. value of -1 will be returned.
  423.  
  424. SERIAL INPUT$ (Get a string from the serial port)
  425. =SERIAL INPUT$(Channel)
  426. Reads an entire string of characters from the serial port.  If there's no
  427. data, the command will return an empty string "".  Otherwise the string
  428. will contain all bytes which have been sent over the serial line up to
  429. the present time.
  430.         Be careful when using this command with high speed transfers (such
  431. as MIDI).  If you wait too long between each SERIAL INPUT$ command, you
  432. can overload the system completely, and generate annoying errors such as
  433. 'string too long' or 'serial device buffer overrun'.
  434.  
  435.  
  436. SETTING THE SERIAL PARAMETERS
  437.  
  438. SERIAL SPEED (Sets the transfer baud rate for a serial channel)
  439. SERIAL SPEED Channel, Baud rate
  440. Sets the current transfer rate of the appropriate channel.  The same
  441. values will be used for both reading and writing operations.  Note that
  442. you can't set split baud rates for a single channel.  If the baud rate
  443. you have specified is not supported by the current device, it may be
  444. rejected by the system.
  445.  
  446. SERIAL BIT (Sets the Nbit & Stopbit part of a protocol)
  447. SERIAL BIT Channel, Nbits, Stopbits
  448. Assigns the number of bits which will be used for each character you
  449. transmit.
  450.  
  451. 'Nbits' is the number of bits
  452. 'Stopbits' is the number of STOP bits
  453.  
  454. SERIAL PARITY (Sets the parity checking)
  455. SERIAL PARITY Channel, Parity
  456. Sets the parity checking you are using for the current serial channel.
  457. Here's a list of the available options:
  458.  
  459. Parity<0:  No parity
  460. Parity>0:  Only the first two bits of this value are significant.
  461.  
  462. Bit 0:          =0->EVEN
  463.                         =1->ODD
  464. Bit 1:          =0->Normal parity
  465.                         =1->SPACE
  466.  
  467. The paruty bit can be set using the BSET or BCLR function like so:
  468.  
  469.         P=0: Bset 0,P: Rem Odd parity
  470.         Bclr 1,P: Rem Normal parity
  471.         Serial Parity 1,P: Rem Set the parity using the value in P
  472.  
  473. See the Commodore's documentation for a full explanation of this system.
  474.  
  475. SERIAL X (Sets XON/XOFF)
  476. SERIAL X Channel, Xmode (Activates/deactivates the XON/XOFF handshaking
  477. system)
  478. A value of TRUE for Xmode disables handshaking.  Any other value turns it
  479. on.  Xmode should be loaded with the correct control characters.  These
  480. must be specified in the following format:
  481.  
  482.         Xmode=XON*$10000000+XOFF*$10000
  483.  
  484. Check Commodore's documentation for more information.
  485.  
  486. OTHER COMMANDS
  487.  
  488. SERIAL BUFFER (Sets the size of the serial buffer)
  489. SERIAL BUFFER Channel, Length
  490. Allocates Length bytes of buffer space for the required channel.  Note
  491. that the default value is 512 bytes and the minimum allocation is 64
  492. bytes.
  493.  
  494. It's a good idea to increase the buffer size for high speed transfers.
  495.  
  496. SERIAL FAST (Switches on FAST transfer mode)
  497. SERIAL FAST Channel
  498. This sets a special fast flag  in the current device and disables a lot
  499. of internal checking which would otherwise slow down the communication
  500. process.  Use it for high speed transfers such as MIDI.
  501.  
  502. WARNING: When you call this command, the protocol will be changed to:
  503. PARITY EVEN, NO XON/OFF and 8 bits.
  504.  
  505. SERIAL SLOW (Switches serial transfer back into SLOW mode)
  506. SERIAL SLOW Channel
  507. Slows the serial device back to normal speed and reactivates all the
  508. error checks.
  509.  
  510. SERIAL CHECK (Reports on current serial device activity)
  511. =SERIAL CHECK(Channel)
  512. Asks the device for a read-out of its current status.  You can use it to
  513. check whether all the information you've transmitted with a previous
  514. SERIAL SEND command has been sent.
  515.  
  516.         CHECK=FALSE (0) -> if the last serial command is still being
  517.         executed.
  518.  
  519.         CHECK=TRUE (-1) -> All done!
  520.  
  521. SERIAL ERROR (Reports success or failure of last transfer)
  522. =SERIAL ERROR(Channel)
  523. Looks for the ERROR byte in the serial device.  A value of zero indicates
  524. that everything is fine.  Otherwise, the last transmission was faulty.
  525.  
  526.  
  527. SENDING LARGE STRINGS
  528. Transmitting a large string may taike quite a long time, especially at
  529. low baud rates.  As AMOS is multitasking, your program will continue to
  530. run AFTER a SERIAL SEND instruction.
  531.         It's essential to avoid provoking a garbage collection before the
  532. transfer has been completed, otherwise your data will be corrupt.  So:
  533.  
  534.   *     Use the =SERIAL CHECK function before doing a lot of string work.
  535.   *     Perform a garage collection using X=FREE to ensure that your
  536.         program will not provoke one automatically.
  537.   *     Use the SERIAL OUT channel, address, length instruction with
  538.         'address' containing the location of a previously reserved memory
  539.         bank.
  540.  
  541. MORE INFORMATION
  542. More information about the Amiga's serial system can be found in the
  543. Commodore ROM KERNAL Referance Manual, Library and Devices.  This will
  544. allow expert users to make maximum use of the serial device.
  545.  
  546.  
  547. MULTI TASKING IMPROVEMENTS
  548.  
  549. MULTI WAIT (Force a multi-task wait vbl)
  550. MULTI WAIT
  551. To make effective multi-tasking programs, you must not grab most of the
  552. processor time, leaving only a limited amount of power for other tasks.
  553. MULTI WAIT does MULTI-TASK wait vbl.  You should use it in your program's
  554. main loop, when you wait for example, for a menu unit item to be
  555. selected.
  556.         Note that you should not use this instruction to make accurate
  557. screen synchronisation as it is designed to multi-task.  This instruction
  558. is NOT consistant at all!  It may skip many VBLs, depending on the number
  559. of running tasks at the time.
  560.         If you missed it elsewhere in the manual, multitasking can be
  561. activated by pressing Amiga+A to flick between AMOS and the CLI or
  562. Workbench environments.  This allows systems with at least 1 meg to run
  563. AMOS and programs like DPaint III at the same time!
  564.  
  565. AMOS TO BACK (Hide AMOS from view and show the Workbench)
  566. AMOS TO BACK
  567. This will bring forward the Workbench display, allowing you to access
  568. other programs.
  569.  
  570. AMOS TO FRONT (Switch AMOS to the display)
  571. AMOS TO FRONT
  572. AMOS is forced back onto the display with this command, leaving the
  573. Workbench hidden.
  574.  
  575. AMOS HERE (Report which task is on display)
  576. AMOS HERE
  577. This returns TRUE if AMOS is currently displayed and FALSE if the
  578. Workbench is in view.
  579.  
  580.  
  581. LOAD AMOS FROM WITHIN A FOLDER
  582. AMOS does a number of housekeeping chores before fully loading up and
  583. presenting itself to you.  One of these is to locate all its default
  584. files like the sprite pointer, default font and so on.  The procedure and
  585. logic is as follows:
  586.  
  587. 1  Check the current system to define if a PAL or NTSC screen is in use.
  588. 2  Depending on the system it will look for the AMOS1_3_PAL.Env or
  589.    AMOS1_3_NTSC.Env.
  590. 3  Failing to find one of these files, it will look for the AMOS System
  591.    folder in the root directory of the current drive.  If this also
  592.    fails, AMOS gives up trying to load and returns to the Workbench.
  593. 4  If AMOS picks up Default.Env at point 2, it will examine the
  594.    environment file to find where the other files are located.  This is
  595.    the key to relocating AMOS anywhere on a disk.
  596.  
  597. Let's assume we want to set up AMOS within a folder called UTILS on a
  598. hard disk.  First we must copy across the following files from the AMOS
  599. Program disk to the hard disk path Dh0:UTILS/
  600.  
  601.         AMOS_System             A folder containing all the default files
  602.         AMOS1.3                 The main AMOS file
  603.  
  604. The files AMOS1_3_PAL.Env and AMOS1_3_NTSC.Env must be moved from the
  605. AMOS System folder to the Utils folder.
  606.  
  607.         AMOS_System
  608.         AMOS1.3
  609.         AMOS1_3_PAL.Env
  610.         AMOS1_3_NTSC.Env
  611.  
  612. Now we must change the Env files so that they tell AMOS where all the
  613. data files are.  To do this you'll have to boot a normal copy of AMOS and
  614. run the Config.AMOS program.  Simply ensure that the loaded extensions
  615. and default files have the correct path and filenames.
  616.         In our example all the files are inside the directory AMOS_System.
  617. Just make sure that the extensions you have read as follows.
  618.  
  619.         1-AMOS_System/Music
  620.         2-AMOS_System/Compact
  621.         3-AMOS_System/Request
  622.         4-AMOS_System/3D
  623.         5-AMOS_System/Compiler
  624.         6-AMOS_System/Serial
  625.  
  626. The default filenames must be set as:
  627.  
  628.         1-AMOS_System/Def_Icon
  629.         2-AMOS_System/Mouse.Abk
  630.         3-AMOS_System/Defaukt.Font
  631.         4-AMOS_System/Default.Key
  632.  
  633. An important point to note is that only the extra part of the pathname is
  634. required.  AMOS adds AMOS_System onto the current path (in this case
  635. Dh0:UTILS/AMOS_System/
  636.         Hard disk users will find this information very helpful and it will
  637. avoid having the AMOS_System folder stuck in the root directory of the
  638. hard disk.  Anyone developing a CDTV application in AMOS will also need
  639. to use this feature.  The above information is also true for the RAMOS
  640. runtime system, the only difference being that RAMOS doesn't require PAL
  641. or NTSC files.
  642.  
  643. INTERLACED SCREEN MODE SUPPORT
  644. To open an interlaced screen use the following syntax:
  645.  
  646. SCREEN OPEN 0,320,200,16,LACED [+HIRES][+LOWRES]
  647.  
  648. LACED is a function that returns 4.
  649.  
  650. Important:  As soon as one screen is opened with interlace, all the other
  651. screens turn to interlace.  The interlacing will only truly effect the
  652. screen actually opened with LACED.  All the others will just have their
  653. vertical lines doubled on the screen to adjust to the special mode.
  654.         Interlaced mode is perfect for displaying pictures, but animation
  655. runs at half normal speed.  Games should not be written in Interlace!
  656.         As soon as the last interlaced screen is closed the whole display
  657. returns to normal mode.  Your TV monitor might not like lots of fast
  658. switching from normal mode to Interlace, so you are adviced not to do
  659. this excessively.
  660.         All normal operations are available in interlaced screens:  Screen
  661. Offset, Screen Display and so on.  The only problem that arises is due to
  662. interlacing being software driven in AMOS.  The bitplanes are changed
  663. during the vertical blank and this particular interlace process is
  664. forbidden during copper list calculation.
  665.         So if you have a large copper list file (ie. four screens, one
  666. interlaced, and a rainbow), and have a copper calculation to do, the
  667. interlaced screen will display only half of the picture during the
  668. calculation.  Nothing can be done to solve this, it is simply a
  669. limitation of the whole system.
  670.  
  671. There are two extra screen commands in AMOS now.  These allow a program
  672. to work out what type of display it is being run on:
  673.  
  674. DISPLAY HEIGHT (Report how tall a screen can be)
  675. =DISPLAY HEIGHT
  676. This command returns 311 in PAL and 263 in NTSC.
  677.  
  678. NTSC (Flags the type of display in operation)
  679. =NTSC
  680. This returns TRUE if the system is in NTSC mode or FALSE if in PAL.
  681. Ideal for international software development!
  682.         NTSC refreshes the screen at 60 times a second whereas PAL refreshes
  683. at only 50 times a second.  However, AMOS1.3 compensates for this and now
  684. music runs at exactly the same speed in PAL and NTSC
  685.         AMAL also relies on the interrupt routine but is not slowed down to
  686. comply with PAL speeds.  You must therefore be careful not to synchronise
  687. music and animations by just relying on the speed they run at.  Check
  688. that an animation frame has been reached or the music has played a
  689. certain note.  Using this technique you'll ensure the software executes
  690. at the right point on all systems.
  691.  
  692.  
  693. OTHER NEW AMOS COMMANDS
  694.  
  695. NEW SYSTEM REQUESTER EXTENSION
  696.  
  697. REQUEST (Generates a requester routine)
  698. REQUEST ON
  699. This will make AMOS generate its own requester routine and is the
  700. default.
  701.  
  702. REQUEST OFF
  703. AMOS will always select CANCEL button of the requester if this command is
  704. used.  The actual requester will not be displayed, so this ideal for
  705. error trapping within a program.
  706.  
  707. REQUEST WB
  708. This tells AMOS to switch back to Workbench's system requester.  You'll
  709. come back to AMOS as soon as you have chosen one of the options.
  710.  
  711. Note:  If you don't load up the Requester (by deleting it from the
  712. extension list using the config file), the normal Workbench requester
  713. will be used for displaying messages.
  714.  
  715. This does have a bad side-effect though, AMOS will seem to have crashed
  716. when a requester appears.  If this happens you simply press Amiga+A to
  717. return to the Workbench, answer the question and press Amiga+A once again
  718. to return to AMOS.  It's only best to avoid loading the requester when
  719. the memory is very low!
  720.  
  721. ALTERING THE BOB DRAWING ORDER
  722.  
  723. PRIORITY REVERSE ON/OFF (Change the order in which Bobs are printed to
  724.                                         the screen)
  725. PRIORITY REVERSE ON
  726. PRIORITY REVERSE OFF
  727.  
  728. PRIORITY REVERSE ON, reverse the entire bob's priority table.  This means
  729. that bob number 1 will be the first one drawn in front of all other bobs,
  730. 2 will come in second etc...  This priority list is compatable with STOS.
  731.         This instruction has another feature when used in conjection with
  732. the PRIORITY ON command.  The bobs are not printed from TOP to BOTTOM any
  733. more, but from BOTTOM to TOP!  The highest bob on the screen will be
  734. displayed in front of the others.
  735.  
  736. SWAPPING BANKS
  737. A new and very needed instruction:
  738.  
  739. Bank Swap number1, number2
  740.  
  741. This instruction will swap the pointers of the two banks.  Useful if you
  742. want to turn an icon bank into a sprite bank.  Example:
  743.  
  744.         Bank Swap 1,2
  745.  
  746. or have more than one music bank at the same time, for example:
  747.  
  748.         Bank Swap 3,5
  749.  
  750.  
  751. SEARCHING FOR THE CURRENT DEVICES
  752. AMOS can report back to you the current list of devices using the
  753. following commands.
  754.  
  755. =DEV FIRST$ (Get first device from current device list)
  756.  
  757. dev$=DEV FIRST$("filter")
  758.  
  759. Works the same as Dir First$ and Dir Next$, but reports back the device
  760. list.  Note that you should remove the spaces with - "" to get the right
  761. name.
  762.  
  763. =DEV NEXT$ (get the next device satisfying the filter)
  764.  
  765. dev$=DEV NEXT$
  766.  
  767. Gets the next device from the device list.  A null string indicates the
  768. end of the list has been reached.  Example:
  769.  
  770.         Print Dev First$
  771.         Do
  772.           A$=Dev Next$
  773.           A$=A$-""
  774.           If A$=""then End
  775.           Print A$
  776.         Loop
  777.  
  778.  
  779. THE FUTURE OF AMOS
  780. AMOS will constantly be updated so that it keeps up-to-date with new
  781. trends on the Amiga scene.  For the latest AMOS update information
  782. contact:
  783. Sandra Sharkey of the AMOS PD Library:
  784. 25 Park Road, Wigan, WN6 7AA, England.
  785. Telephone 10am to 3pm on (0942) 495261
  786.  
  787. End.
  788.